package vm

import "go-forth/pkg/forth"

type Stack struct {
	tokens []forth.Token
}

func NewStack() *Stack {
	return &Stack{}
}

func (s *Stack) Push(token forth.Token) {
	s.tokens = append(s.tokens, token)
}

func (s *Stack) Pop() forth.Token {
	if len(s.tokens) == 0 {
		panic("stack underflow")
	}
	ret := s.tokens[len(s.tokens)-1]
	s.tokens = s.tokens[:len(s.tokens)-1]
	return ret
}

func (s *Stack) Clear() {
	s.tokens = nil
}

var _ forth.Stack = &Stack{}
